package la.iok.hzsvn.lewin.movie.entity;

import la.iok.hzsvn.share.annotations.NotNull;
import la.iok.hzsvn.share.collection.IdAble;

import java.util.Objects;

/**
 * 剧本文件基类。剧本所有存储文件基类。分不同表，避免单表过大查询慢
 */
public class MovieFile implements IdAble<Long> {
    /**
     * id对象
     */
    private Long id;
    /**
     * 文件名称
     */
    private String fileName;
    /**
     * 分布式文件系统中的存储路径
     */
    private String path;
    /**
     * 此文件的引用数量
     */
    private Integer count;
    /**
     * 文件的摘要信息.MD5或者SHA-1.如果摘要信息相同,则认为是相同文件
     */
    @NotNull
    private String digest;
    /**
     * 标记文件系统中的文件是否已经删除。在清除剧本文件的时候,不删除数据库中的记录而是标记为文件已删除并删除分布式文件系统中的文件.
     * 0：未删除，1：已删除。默认为0
     */
    private Integer fileDeleted;

    /**
     * 文件长度，单位字节。默认值为-1,表示长度未知。如果文件已经删除，长度数据就是之前的旧数据
     */
    private Long length;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public Integer getCount() {
        return count;
    }

    public void setCount(Integer count) {
        this.count = count;
    }

    public String getDigest() {
        return digest;
    }

    public void setDigest(String digest) {
        this.digest = digest;
    }

    public Integer getFileDeleted() {
        return fileDeleted;
    }

    public void setFileDeleted(Integer fileDeleted) {
        this.fileDeleted = fileDeleted;
    }

    public Long getLength() {
        return length;
    }

    public void setLength(Long length) {
        this.length = length;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof MovieFile)) return false;
        MovieFile movieFile = (MovieFile) o;
        return Objects.equals(id, movieFile.id) && Objects.equals(fileName, movieFile.fileName)
                && Objects.equals(path, movieFile.path) && Objects.equals(count, movieFile.count)
                && Objects.equals(digest, movieFile.digest);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, fileName, path, count, digest);
    }
}
